// import { Toast } from 'element-ui'
import { getToken } from '@/utils/auth'
import axios from 'axios'
import base from '@/config/index'
import md5 from 'md5'
import { isBrowser } from '@/utils/util'
import Cookies from 'js-cookie'
// eslint-disable-next-line new-cap
// if (isBrowser()) {
//   unique_id = localStorage.getItem('unique_id')
// } else {
//   // 服务器端获取unique_id
//   if (global.__VUE_SSR_CONTEXT__ && global.__VUE_SSR_CONTEXT__.req) {
//     unique_id = global.__VUE_SSR_CONTEXT__.req.cookies.unique_id
//   }
// }
const service = axios.create({
  baseURL: base.BASE_API,
  timeout: base.TIME_OUT
})

service.interceptors.request.use(
  config => {
    /**
     * 添加请求报文配置
     */
    let ips = ''
    if (isBrowser()) {
      ips = Cookies.get('user_ip')
    } else {
      if (global.__VUE_SSR_CONTEXT__ && global.__VUE_SSR_CONTEXT__.nuxt && global.__VUE_SSR_CONTEXT__.nuxt.state) {
        ips = global.__VUE_SSR_CONTEXT__.nuxt.state.user_ip
      }
    }
    config.params = { ...config.params, client: 'rcat_pc' }
    let querys = ''
    const obj = {}
    let datas = {}
    if (config.url.indexOf('?') !== -1) {
      const arr = config.url.substring(config.url.indexOf('?') + 1).split('&')
      arr.forEach((item) => {
        if (item.indexOf('=') !== -1) {
          obj[item.slice(0, item.indexOf('='))] = item.slice(item.indexOf('=') + 1)
        }
      })
      datas = { ...obj, ...config.params }
    } else {
      datas = { ...config.params }
    }
    const result = Object.keys(datas).sort(function(a, b) {
      return a.localeCompare(b)
    })
    for (const key in datas) {
      if (Array.isArray(datas[key])) {
        if (!datas[key].length) {
          delete (datas[key])
        }
      }
    }

    result.forEach(item => {
      if (datas[item] !== undefined) {
        querys += `${item}=${datas[item]}&`
      }
    })
    querys = querys.substring(0, querys.length - 1)
    var slat = '52WT3+Mxm5+7S4PQ4v8qj+uFW5LJ'
    const newData = Date.parse(new Date()) / 1000
    config.headers['Sign-Timestamp'] = newData
    config.headers['Sign'] = md5(querys + newData + slat)
    config.headers['X-Forwarded-For'] = ips
    if (getToken()) {
      config.headers['Authorization'] = 'Bearer ' + getToken()
    }
    // console.log(config)
    // if (isBrowser()) {
    //   alert(config.baseURL + config.url + '?unique_id=' + config.params.unique_id)
    // }
    // if (store.getters.token) {
    //   config.headers['Authorization'] = 'Bearer ' + getToken()
    // }
    // if (base.TOKEN) {
    //   config.headers['Authorization'] = 'Bearer ' + base.TOKEN
    // }
    return config
  },
  error => {
    Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(
  response => {
    const res = response.data
    if (res.code !== 200 && res.code !== 201 && res.code !== 204) {
      // 303:非法的token; 301:Token 过期了;
      if (res.code === 303 || res.code === 301) {
        /**
         * token失效处理
         */
        // Toast({
        //   message: '身份验证失效, 请重新登录',
        //   position: 'top',
        //   duration: 5000
        // })
        console.log('TOKEN身份验证失效')
        // MessageBox.confirm('你已被登出，可以取消继续留在该页面，或者重新登录', '确定登出', {
        //   confirmButtonText: '重新登录',
        //   cancelButtonText: '取消',
        //   type: 'warning'
        // }).then(() => {
        //   store.dispatch('FedLogOut').then(() => {
        //     location.reload()
        //     store.commit('SET_TOKEN', '')
        //   })
        // }).catch(() => {
        // })
      } else {
        /**
         * 当code不是上面其他情况的处理
         */
        // Toast({
        //   message: res.message,
        //   position: 'top',
        //   duration: 5000
        // })
        // console.log(res.message)
        console.log('404')
      }
      return Promise.reject('error')
    } else {
      return response.data
    }
  },
  error => {
    /**
     * 接口问题处理
     */
    // Toast({
    //   message: error.message,
    //   position: 'top',
    //   duration: 5000
    // })
    // console.log(error)
    return Promise.reject(error)
  }
)

export default service
